МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Кафедра ЗІ
Лабороторна робота №1
Знайомство з інтегрованим середовищем розробки
AVR Studio та програмою симуляції Proteus.
Написання та відладка простих програм
для AVR-мікроконтролерів
з курсу
"МІКРОПРОЦЕСОРНІ ПРИСТРОЇ"
Варіант № 27
Мета роботи: ознайомитись з послідовністю створення та відладки програмно-апаратних засобів на основі мікроконтролерів сімейства AVR в програмах AVR Studio та Proteus 7.
Завдання:
1. Домашня підготовка до роботи
Вивчити теоретичний матеріал.
Вивчити основні властивості МК необхідні для виконання лабораторної роботи.
Підготовити програму функціонування охоронної системи згідно індивідуального завдання.
2. Виконати в лабораторії
Створити проект в AVR Studio, ввести свою програму, провести її асемблювання.
В режимі покрокової відладки переконатися в правильності роботи програми, перевірити дотримання заданих в завданні часових параметрів.
Відкрити файл LR_1.dsn в програмі Proteus, внести зміни у схему відповідно до свого індивідуального завдання, підключити до МК отриманий в AVR Studio hex-файл.
Запустити режим симуляції схеми та перевірити правильність функціонування охоронної системи у всіх режимах роботи. У випадку виявлення відхилень в роботі внести потрібні виправлення.
№
Кількість охоронних
шлейфів з НРЗ давачами
Кількість охоронних
шлейфів з НЗМ давачами
Виводи для підкл.
охоронних
шлейфів з НРЗ давачами
Виводи для підкл.
охоронних
шлейфів з НЗМ давачами
Період
опитування
шлейфів T_Scan,
с
Час постановки та зняття з охорони T_Alarm,
с
Частота
імпульсів сирени та світлодіода F_Blick,
Гц
Вивід для підкл. світлодіода
Вивід для підкл. сирени
2
2
PB1, PB4
PD1, PD4
0.08
5.8
560
PB5
PD3
Лістинг програми:
.include <2313def.inc>
.def temp = r16
.def d_mask = r17
.def b_mask = r18
.def Delay1=r20
.def Delay2=r21
.def Delay3=r22
.equ T_Scan=240000; T_scan time 0.08 s
.equ T_Alarm=3479907; T_Alarm time 5.8 s
.equ T_Blick=1067; T_Blick time 1/560
.cseg
.org 0
ldi r16, 0xdf
out spl, r16 ; ініціалізація стеку
rcall InitIO ; ініціалізація вводів/виводів
; Чекаємо доки ввімкнуть кнопку сигналізації
check_turn_on:
in temp, PIND
bst temp, 0
brts check_turn_on
; Перед постановкою на охорону необхідно почекати 5.8 сек
ldi Delay1, low(T_Alarm) ; виставляємо час очікуваня
ldi Delay2, high(T_Alarm)
ldi Delay3, byte3(T_Alarm)
rcall Delay
; Вмикаємо світлодіод
cbi PORTB, 5
ldi d_mask, 0b00010010
ldi b_mask, 0b00010010
; Опитуємо давачі
check_davach:
in temp, PINB
eor temp, b_mask
brne Alarm
in temp, PIND
and temp, d_mask
brne Alarm
in temp, PIND ; перевіряємо чи сигналізація ввімкнена
bst temp, 0
brts check_turn_on ; якщо перемикач вимкнено переходимо на початак
ldi Delay1, low(T_Scan)
ldi Delay2, high(T_Scan)
ldi Delay3, byte3(T_Scan)
rcall Delay
rjmp check_davach
; один з давачів спрацював
Alarm:
; очікуємо вимкнення сигналізації
ldi Delay1, low(T_Alarm)
ldi Delay2, high(T_Alarm)
ldi Delay3, byte3(T_Alarm)
rcall Delay
; перевіряємо чи її вимкнено
in temp, PIND
bst temp, 0
brtc Blick_Alarm ; якщо не вимкнено ввімкнути серену
; вимикаємо світлодіод
sbi PORTB, 5
rjmp check_turn_on
Blick_Alarm:
; змінюємо стан світлодіода
sbic PINB, 5 ; if cleared skip next
cbi PORTB, 5
sbis PINB, 5 ; if set skip next
sbi PORTB, 5
; змінюємо стан серени
sbic PIND, 3 ; if cleared skip next
cbi PORTD, 3
sbis PIND, 3 ; if set skip next
sbi PORTD, 3
; затримка
ldi Delay1, low(T_Blick)
ldi Delay2, high(T_Blick)
ldi Delay3, byte3(T_Blick)
rcall Delay
rjmp Blick_Alarm
InitIO: ; Ініціалізація портів вводу/виводу
cbi DDRD, 1
sbi PORTD, 1
cbi DDRD, 4
sbi PORTD, 4
cbi DDRB, 1
sbi PORTB, 1
cbi DDRB, 4
sbi PORTB, 4
cbi DDRD, 0 ; перемикач
sbi PORTD, 0
sbi DDRB, 5 ; Світло діод
sbi PORTB, 5
sbi DDRD, 3 ; серена
cbi PORTD, 3
ret
Delay:
subi Delay1, 1
sbci Delay2, 0
sbci Delay3, 0
brcc ...